#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 5

typedef struct Table{
	int *head;
	int length;	//当前顺序表长度 
	int size;	//当前顺序表容量 
} table;

//初始化线性表
table initTable();

//添加元素
table add_table(table t,int elem,int index);

//根据位置删除元素，返回该元素的结点
table del_table(table t,int index); 

//查找元素,返回其对应的元素的下标 
int select_table(table t,int elem); 

//更改元素
table update_list_elem(table t,int old_elem,int new_elem); 

//输出线性表元素
void display_list_elem(table t);
 

int main()
{
	table t=initTable();
	// ... 
	return 0;
}

table initTable()
{
	table t;
	t.head=(int*)malloc(sizeof(int)*MAX_SIZE);
	if(t.head==NULL)
	{
		printf("初始化失败\n");
		exit(0);
	}
	//初始化成功后设置当前线性表容量和总容量
	t.length=0;
	t.size=MAX_SIZE;
	//将该线性表返回 
	return t; 
}

void display_list_elem(table t)
{
	for(int i=0;i<t.length;i++)
	{
		printf("%d\n",t.head[i]);
	}
}

table add_table(table t,int elem,int index)
{
	//判断插入的位置是否合理
	if(index<1 ||index>t.length)
	{
		printf("插入位置不合理\n");
		return t;
	} 
	
	//查看空间是否充足
	if(t.length==t.size)
	{
		//空间不够就开辟空间
		t.head=(int* )realloc(t.head,sizeof(int)*MAX_SIZE);
		if(t.head==NULL)
		{
			printf("空间开辟失败\n");
			return t;
		} 
		
		//更新前线性表的容量
		t.size+=MAX_SIZE; 
	} 
	
	//开始执行插入操作，需要将从插入位置后面的元素逐渐后移,从最后一个元素开始操作 
	for(int i=t.length-1;i>=index;i--)
	{
		t.head[i+1]=t.head[i];
	} 
	
	//后移完成后，将需要插入的元素插入到指定位置(此时直接赋值即可)
	t.head[index-1]=elem;
	//添加元素后需要将当前顺序表长度+1
	t.length++;
	return t; 
}

table del_table(table t,int index)
{
	//判断要删除的位置是否合理
	if(index<0 || index>=t.length)
	{
		printf("删除位置有误，无法删除");
		return t;
	} 
	
	//进行删除操作,将删除后面的元素前移覆盖即可 
	for(int i=index;i<t.length;i++)
	{
		t.head[i]=t.head[i+1];
	} 
	
	//删除后，列表长度-1
	t.length--;
	return t; 
}

int select_table(table t,int elem)
{
	for(int i=0;i<t.length;i++)
	{
		if(t.head[i]==elem)
		{
			return i+1;
		}
		
		//查找失败返回-1 
		return -1;
	}
}

table update_list_elem(table t,int old_elem,int new_elem)
{
	//判断需要修改的元素的下标是否存在
	int index=select_table(t,old_elem);
	if(index==-1)
	{
		//未找到
		printf("需要修改的元素下表未找到\n"); 
		return t;
	} 
	t.head[index-1]=new_elem;
	return t;
}

